package main

import (
	"fmt"
	"sync"
)

// 多个goroutine并发操作全局变量X

var (
	x    int
	wx   sync.WaitGroup
	lock sync.Mutex // 互斥锁，保证同一时间只有一个goroutine可以访问共享资源
)

func add() {
	for i := 0; i < 5000; i++ {
		lock.Lock()
		x = x + 1
		lock.Unlock()
	}
	wx.Done()
}

func main() {
	wx.Add(2)
	go add()
	go add()
	wx.Wait()
	fmt.Println(x) //打印出有的时候是10000，有的时候不是，因为是并发同事操作，会产生数据竞争问题，所以要采用互斥锁

}
